package com.qf.login.controller;

import com.qf.login.service.UserService;
import com.qf.vo.ResultVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.UUID;

/**
 * 头像控制器，负载用户头像的上传和下载
 */
@RestController
@RequestMapping("/avatar")
@Slf4j
public class AvatarController {

    // 从yml文件中获取 avatar.uploadpath 的value
    @Value("${avatar.uploadpath}")
    private String avatarPath;

    @Autowired
    private UserService userService;


    /**
     * 头像上传接口
     * @param file    上传的文件
     * @param userid  用户id
     * @return data部分要求是头像文件的url
     */
    @PostMapping("/upload")
    public ResultVo upload(MultipartFile file,Integer userid) throws IOException {

        log.debug("上传的文件为:file={},userid={}",file,userid);

        //参数校验，省略
        //1. 把文件存放到指定目录下
        // 生成一个uuid代表头像文件名
        String filename = UUID.randomUUID().toString();
        // 获取用户上传文件的扩展名
        String oldFileName = file.getOriginalFilename();
        int index = oldFileName.lastIndexOf(".");
        String extname = oldFileName.substring(index);

        String avatarName = filename + extname;
        String avatarFilePath = avatarPath + avatarName;
        file.transferTo(new File(avatarFilePath));
        //2. 更新数据库， 把userid对应的头像字段的内容修改掉
        userService.updateAvatar(avatarName,userid);

        //3. 生成可以下载这个头像的url，返回给前端
        String url = "http://localhost:8080/avatar/download/"+avatarName;
        return new ResultVo(1, "ok", url);

    }

    /**
     * 路径参数
     * @param avatarName
     */
    @GetMapping("/download/{avatarName}")
    public void download(@PathVariable("avatarName") String avatarName, HttpServletResponse response) throws IOException {

        String filePath = avatarPath + avatarName;
        // 将文件的内容，从filePath指向的文件，拷贝到 response中（响应体中）
        IOUtils.copy(new FileInputStream(filePath),response.getOutputStream());
    }

}
